
package co.edu.uniquindio.pruebas;

import java.text.ParseException;
import java.util.Date;
import java.util.List;
import java.util.Vector;

import javax.naming.NamingException;

import org.junit.Assert;
import org.junit.Test;

import co.edu.uniquindio.dto.ConsultaDTO;
import co.edu.uniquindio.logica.Automovil;
import co.edu.uniquindio.logica.Color;
import co.edu.uniquindio.logica.Marca;
import co.edu.uniquindio.logica.Modelo;
import co.edu.uniquindio.logica.Motor;
import co.edu.uniquindio.logica.Pais;
import co.edu.uniquindio.logica.Vendedor;

/**
 * 
 * Prueba implementation class for: PruebaAutomovil
 * El proposito de esta clase es el probar todas las
 * DAOs relacionadas con la informacion de un automovil.
 * @author Andres Felipe Abril 
 * @author Luis Enrique Robledo
 *
 */
public class PruebaAutomovil extends PruebaMagnum
{
	
	/**
	 * Constructor de la clase PruebaAutomovil el cual 
	 * configura las condiciones iniciales para hacer la prueba.
	 */
	
	public PruebaAutomovil() throws NamingException 
	{
		super();
		// TODO Auto-generated constructor stub
	}
	
	/**
	 * Metodo en el cual se hacen diversas incersiones en la BD atravez de
	 * de las DAOs pertinentes relacionadas al automovil para despues verificar
	 * los datos obtenidos atravez de las mismas DAOs. 
	 * @throws NamingException
	 */
    
	@Test
	public void testCrudAutomovil() throws NamingException 
	{


		Color color= new Color("VerdeCielo",8,12,13,5);
		colorDao.insert(color);

		Marca renoult= new Marca("renoult8",  "en perfectas condiciones");
		//marcaDao.insert(renoult);

		Pais pais=new Pais("av1234",new Date(),"bolivia");
		//paisDao.insert(pais);

		Modelo r4=new Modelo(renoult, "r8", "nada");
		//modeloDao.insert(r4);


		Vendedor vendedor1= new Vendedor("12343","asd@hotmail","carlos",pais,"paco","23487");
		//vendedorDao.insert(vendedor1);
		
		Vendedor vendedor3 = new Vendedor("1234567","asdde@hot","curlos",pais,"mancho","54657");
		//vendedorDao.insert(vendedor3);

		Motor motor= new Motor(123473,43,84);
		//motorDao.insert(motor);

		Automovil automovil=new Automovil("121trp",color,r4,vendedor3,new Date(),"24 rpm",motor);

		//Prueba de insercion
		automovilDao.insert(automovil);
		Assert.assertEquals("121trp", automovil.getNumeroPlaca());
		//Prueba de búsqueda
		Automovil automovilRecuperado= automovilDao.findByKey(automovil.getNumeroPlaca());
		Assert.assertEquals(automovilRecuperado.getNumeroPlaca(), automovil.getNumeroPlaca());
		//Prueba actualización
		automovilRecuperado.setKilometraje("85 rpm");
		automovilRecuperado.setFecha(new Date());
		automovilDao.update(automovilRecuperado);
		automovil= automovilDao.findByKey(automovilRecuperado.getNumeroPlaca());
		Assert.assertEquals("121tre", automovil.getNumeroPlaca());

		//Prueba getAll
		Automovil otroAutomovil=new Automovil();
		otroAutomovil.setNumeroPlaca("133wet");
		otroAutomovil.setKilometraje("34 rpm");
		otroAutomovil.setFecha(new Date());
//		automovilDao.insert(otroAutomovil);
//		List<Automovil> automoviles= automovilDao.getAll();
//		Assert.assertTrue(automoviles.contains(otroAutomovil));
//		Assert.assertTrue(automoviles.contains(automovil));

//		//Prueba select
//		automoviles=automovilDao.select("Automovil.placa='123tre'");
//		Assert.assertTrue(automoviles.contains(otroAutomovil));
//		Assert.assertTrue(!automoviles.contains(automovil));
		
		//Prueba de remove
		//automovilDao.remove(automovil);
		//automovilDao.remove(otroAutomovil);
		//automoviles=automovilDao.getAll();
		//Assert.assertTrue(!automoviles.contains(otroAutomovil));
		//Assert.assertTrue(!automoviles.contains(automovil));

		
	}
	
	/**
	 * Metodo en el cual se hacen diversas incersiones en la BD atravez de
	 * de las DAOs pertinentes relacionadas al automovil para despues verificar
	 * los datos obtenidos atravez de las mismas DAOs mediante listas.
	 */
	
	@Test
	public void pruebaLista()
	{
//		Color color= new Color("Amarillo",2,12,13,5);
//		colorDao.insert(color);
//
//		Marca renoult= new Marca("renoult121",  "en perfectas condiciones");
//		marcaDao.insert(renoult);
//
//		Pais pais2=new Pais("av1234",new Date(),"francia");
//		paisDao.insert(pais2);
//
//		Modelo r4=new Modelo(renoult, "r9", "nada");
//		modeloDao.insert(r4);
//
//
//		Vendedor vendedor= new Vendedor("1234","asd@hotmail","carlos",pais2,"paco");
//		vendedorDao.insert(vendedor);
//
//		Motor motor= new Motor(123478,4,8);
//		motorDao.insert(motor);
//		Automovil automovil=new Automovil("123asd",color,r4,vendedor,new Date(),"24 rpm",motor);
//		
//		Automovil automovil2=new Automovil("432gtr",color,r4,vendedor,new Date() ,"24 rpm",motor);
//
//		//Prueba de insercion
//		automovilDao.insert(automovil);
//		automovilDao.insert(automovil2);
//		Assert.assertEquals("123asd", automovil.getNumeroPlaca());
//		
//		List<Automovil> automoviles =automovilDao.obtenerAutosVendedor(vendedor);
//		
//		for (Automovil automovil3 : automoviles)
//		{
//		    System.out.println(automovil3.toString());
//		}
//		//TODO: como es el assert para una lista ??
		
	}
	
	/**
	 * Metodo en el cual se prueba el funcionamiento de un metodo
	 * de AutomovilDao segun los valores retornados conociendo
	 * los datos existentens en la BD.
	 */
	@Test
    public void pruebaListaVectores()
	{
		List<Vector<Object>> lista=automovilDao.algo("bolivia");
		Assert.assertEquals(lista.size(), 1);
	}
	/**
	 * Metodo en el cual se prueba el funcionamiento de la
	 * clase ConsultaDto.
	 */
	@Test
	public void pruebaDTO()
	{
		List<ConsultaDTO> lista=automovilDao.consultaDto();
		Assert.assertEquals(lista.size(), 4);
		for (ConsultaDTO consultaDTO : lista)
		{
			System.out.println(consultaDTO.toString());
		}
		
	}
	//@Test
	@SuppressWarnings("deprecation")
	public void pruebaBuscarPorAnio() throws ParseException
	{
		Date fecha= new Date();
		fecha.setYear(2011);
		List<Automovil>autos = automovilDao.buscarPorAnio(fecha);
		Assert.assertEquals(autos.size(), 4);
		for (Automovil automovil : autos) {
			System.out.println(automovil.getNumeroPlaca());
		}
	}
	
}
